package org.bopis.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.bopis.services.db.DAOUsuario;
import org.bopis.utilidades.Utilidades;

/**
 * Clase que gestiona el formulario de registro de usuarios
 * @author i.fernandezmolina
 *
 */
public class RegistroUsuarioForm extends ActionForm{

	private static final long serialVersionUID = 1L;
	
	private String screenName;
	private String nombre;
	private String apellido1;
	private String apellido2;
	private String empresa;
	private String contacto;
	private String telefono;
	private String email;
	private String pwd;
	private String captcha;
	private boolean terms;
	
	public String getScreenName() {
		return screenName;
	}

	public void setScreenName(String screenName) {
		this.screenName = screenName;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido1() {
		return apellido1;
	}

	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

	public String getApellido2() {
		return apellido2;
	}

	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

	public String getEmpresa() {
		return empresa;
	}

	public void setEmpresa(String empresa) {
		this.empresa = empresa;
	}

	public String getContacto() {
		return contacto;
	}

	public void setContacto(String contacto) {
		this.contacto = contacto;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	public String getCaptcha() {
		return captcha;
	}

	public void setCaptcha(String captcha) {
		this.captcha = captcha;
	}
	
	public boolean isTerms() {
		return terms;
	}

	public void setTerms(boolean terms) {
		this.terms = terms;
	}

	/**
	 * Validaciones del fomulario
  	 */
  	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) 
  	{
    	ActionErrors errors = new ActionErrors();
		
    	//el screenname es obligatorio y debe de ser unico
    	if(Utilidades.isVacia(screenName)){
    		errors.add("screenName", new ActionMessage("registro.usuario.screenname.required"));
    	}else{
    		if(DAOUsuario.getUsuarioByScreenName(screenName) != null){
    			errors.add("screenName", new ActionMessage("registro.usuario.screenname.unico"));
    		}    		
    	}
    	
    	//el nombre es obligatorio
    	if(Utilidades.isVacia(nombre)){
    		errors.add("nombre", new ActionMessage("registro.usuario.nombre.required"));
    	}
    	
    	//el primer apellido es obligatorio
    	if(Utilidades.isVacia(apellido1)){
    		errors.add("apellido1", new ActionMessage("registro.usuario.apellido1.required"));
    	}
    	
    	//el segundo apellido es obligatorio
    	if(Utilidades.isVacia(apellido2)){
    		errors.add("apellido2", new ActionMessage("registro.usuario.apellido2.required"));
    	}
    	
    	//el telefono debe de tener un formato valido
    	if(!Utilidades.isVacia(telefono)){    		
    		if(!Utilidades.isTelefono(telefono)){
        		errors.add("telefono", new ActionMessage("registro.usuario.telefono.formato"));
        	}    		
    	}
    	
    	
    	//el email debe de tener un formato valido y debe de ser unico
    	if(!Utilidades.isVacia(email)){
    		
    		if(!Utilidades.isEmail(email)){
        		errors.add("email", new ActionMessage("registro.usuario.email.formato"));
        	}else{
        		if(DAOUsuario.getUsuarioByEmail(email) != null){
        			errors.add("email", new ActionMessage("registro.usuario.email.unico"));
        		}
        	}   		
    	}    	
    	
    	//la contraseña no puede ser nula    	
    	if(Utilidades.isVacia(pwd)){
    		errors.add("pwd", new ActionMessage("registro.usuario.pwd.required"));
    	}
    	
    	//se debe de introducir el texto del captcha
    	String captchaSession = (String) request.getSession().getAttribute("captcha");
    	if(Utilidades.isVacia(captcha)){
    		errors.add("captcha", new ActionMessage("registro.captcha.null"));
    	}else{
    		if(!captcha.equals(captchaSession)){
    			errors.add("captcha", new ActionMessage("registro.captcha.error"));
    		}
    	}
    	
    	if(!terms){
    		errors.add("terms", new ActionMessage("terms.acepto.error"));
    	}
    	
    	
    	if(errors.size() > 0){
    		this.captcha = null;
    		this.pwd = null;
    		request.setAttribute("captcha", this.captcha);
    		request.setAttribute("pwd", this.pwd);
    	}   	   	
    	    	
    	return errors;
  	}
	
  	/**
   	 * Resetea todas las propiedades a sus valores por defecto.
   	 */
  	public void reset(ActionMapping mapping, HttpServletRequest request) 
  	{
  		this.screenName = null;
  		this.nombre = null;
  		this.apellido1 = null;
  		this.apellido2 = null;
  		this.empresa = null;
  		this.contacto = null;
  		this.telefono = null;
  		this.email = null;
  		this.pwd = null;
  		this.captcha = null;
  	}
	
}
